<?php

$www_file = __DIR__;
// 打开网站目录下的hooks.log文件,需要在服务器上创建,并给写权限
$fs = fopen($www_file . DIRECTORY_SEPARATOR . 'hook.log', 'a');

fwrite($fs, '================ Update Start ===============' . PHP_EOL . PHP_EOL);

// 自定义字串掩码 用于验证
$access_token = 'jtUmpo3ySTAZG1cuIKwbn2OYqigvXazCk';
// 接受的ip数组，也就是允许哪些IP访问这个文件 这里是gitlab服务器IP
// $access_ip = ['192.168.1.90', '171.15.109.36', '192.168.1.80'];

// header解析会加上HTTP前缀同时转-为_，同时变为纯大写字符
$client_token = $_SERVER["HTTP_X_GITEE_TOKEN"];
$client_ip = $_SERVER['REMOTE_ADDR'];
if (!$client_token) {
    $client_token = $_REQUEST['X-Gitee-Token'];
}

// 把请求的IP和时间写进log
fwrite($fs, 'Request on [' . date("Y-m-d H:i:s") . '] from [' . $client_ip . ']' . PHP_EOL);

// 验证token 有错就写进日志并退出
if ($client_token !== $access_token) {
    echo "error 403";
    fwrite($fs, "Invalid token [{$client_token}]" . PHP_EOL);
    exit(0);
}

// // 验证ip
// if (!in_array($client_ip, $access_ip)) {
//     echo "error 503";
//     fwrite($fs, "Invalid ip [{$client_ip}]" . PHP_EOL);
//     exit(0);
// }

// 获取请求端发送来的信息，具体格式参见gitlab的文档
// $json = file_get_contents('php://input');
// $data = json_decode($json, true);
//如果有需要 可以打开下面，把传送过来的信息写进log
# fwrite($fs, 'Data: '.print_r($data, true).PHP_EOL);

//执行shell命令并把返回信息写进日志
$output = shell_exec("cd {$www_file} && git reset --hard && git pull 2>&1");
fwrite($fs, 'Info:' . $output . PHP_EOL);

fwrite($fs, PHP_EOL . '================ Update End ===============' . PHP_EOL . PHP_EOL);

$fs and fclose($fs);
